package com.copsoftware.procesos.denuncia.service;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.springframework.beans.BeanUtils;

import com.copsoftware.entity.DenDenunciaImpl;
import com.copsoftware.hibernate.cfg.HibernateUtils;
import com.copsoftware.procesos.denuncia.beans.DenunciaFlt;
import com.copsoftware.procesos.denuncia.dao.DenunciaDAO;
import com.copsoftware.struts.forms.RegistrarDenunciaForm;
import com.copsoftware.utils.beans.DateFormatter;
import com.copsoftware.utils.beans.GeoUtils;
import com.copsoftware.utils.constants.CSConstants;

public class DenunciaService {
	
	public void guardarDenuncia(RegistrarDenunciaForm form) throws Exception {
		DenDenunciaImpl denDenuncia = getDenuncia(form.getCDenuncia());
		form.setFDenuncia(DateFormatter.parse(form.getSFDenuncia()));
		BeanUtils.copyProperties(form, denDenuncia,
				new String[] { "CDenuncia","cadenaPuntos" });
		
		denDenuncia.setGPosicion(GeoUtils.obtenerPunto(form.getCadenaPuntos()));
		
		if (form.getCDenuncia() == null)
			denDenuncia.setCEstado(CSConstants.ESTADO_REGISTRADO);
		
		
		
//		if (form.getCTipoDelito()== 1)
//			denDenuncia.setCLugar(2);
//		else if (form.getCTipoDelito()==2)
//			denDenuncia.setCLugar(3);
//		else if (form.getCTipoDelito()==3)
//			denDenuncia.setCLugar(4);
			
			
		Session session = HibernateUtils.getSessionFactory()
				.getCurrentSession();
		Transaction tx = null;
		DenDenunciaImpl denuncia = null;
		try {
			tx = session.beginTransaction();
			DenunciaDAO denunciaDAO = new DenunciaDAO();
			denunciaDAO.setSession(session);
			denunciaDAO.guardarDenuncia(denDenuncia);
			tx.commit();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			tx.rollback();
			e.printStackTrace();
			throw e;
		}
	}

	private DenDenunciaImpl getDenuncia(Integer cDenuncia) {
		DenDenunciaImpl denDenuncia = null;
		if (cDenuncia == null) {
			denDenuncia = new DenDenunciaImpl();
		} else {
			denDenuncia = buscarDenuncia(cDenuncia);
		}
		return denDenuncia;
	}
	
	public RegistrarDenunciaForm getDenunciaForm(Integer cDenuncia){
		RegistrarDenunciaForm  form = new RegistrarDenunciaForm();
		DenDenunciaImpl denDenuncia = getDenuncia(cDenuncia);
		BeanUtils.copyProperties(denDenuncia, form);
		return form;
	}
	

	private DenDenunciaImpl buscarDenuncia(Integer cDenuncia) {

		Session session = HibernateUtils.getSessionFactory()
				.getCurrentSession();
		Transaction tx = null;
		DenDenunciaImpl denuncia = null;
		try {
			tx = session.beginTransaction();
			DenunciaDAO denunciaDAO = new DenunciaDAO();
			denunciaDAO.setSession(session);
			denuncia = denunciaDAO.buscarDenuncia(cDenuncia);
			tx.commit();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			tx.rollback();
		}
		return denuncia;

	}

	public List buscarDenuncia(DenunciaFlt denunciaFlt) {

		Session session = HibernateUtils.getSessionFactory()
				.getCurrentSession();
		Transaction tx = null;
		List listaDenuncias = null;
		try {
			tx = session.beginTransaction();
			DenunciaDAO denunciaDAO = new DenunciaDAO();
			denunciaDAO.setSession(session);
			listaDenuncias = denunciaDAO.buscarDenuncia(denunciaFlt);
			tx.commit();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			tx.rollback();
		}
		return listaDenuncias;
	}
	
	public List buscarDenunciaInvestigacion(Integer idInvestigacion) {

		Session session = HibernateUtils.getSessionFactory()
				.getCurrentSession();
		Transaction tx = null;
		List listaDenuncias = null;
		try {
			tx = session.beginTransaction();
			DenunciaDAO denunciaDAO = new DenunciaDAO();
			denunciaDAO.setSession(session);
			listaDenuncias = denunciaDAO.buscarDenunciaInvestigacion(idInvestigacion);
			tx.commit();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			tx.rollback();
		}
		return listaDenuncias;
	}
	
	
	public List buscarDenunciaSinInv(DenunciaFlt denunciaFlt, Integer idInvestigacion) {
		
		
		denunciaFlt.setEstado(String.valueOf(CSConstants.ESTADO_APROBADO));
		Session session = HibernateUtils.getSessionFactory()
				.getCurrentSession();
		Transaction tx = null;
		List listaDenuncias = null;
		try {
			tx = session.beginTransaction();
			DenunciaDAO denunciaDAO = new DenunciaDAO();
			denunciaDAO.setSession(session);
			listaDenuncias = denunciaDAO.buscarDenunciaSinInv(denunciaFlt, idInvestigacion);
			tx.commit();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			tx.rollback();
		}
		return listaDenuncias;
	}
	
	
	
	
	
	public void actualizarEstadoDenuncia(Integer idDenuncia,Integer idEstado) {

		Session session = HibernateUtils.getSessionFactory()
				.getCurrentSession();
		Transaction tx = null;

		try {
			tx = session.beginTransaction();
			DenunciaDAO denunciaDAO = new DenunciaDAO();
			denunciaDAO.setSession(session);
			denunciaDAO.actualizarEstadoDenuncia(idDenuncia, idEstado);
			tx.commit();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			tx.rollback();
		}
	}
}
